fix(acp): state the reply delivery contract in the turn prompt - #4346
Open
yougeqiu wants to merge 1 commit into
Open
fix(acp): state the reply delivery contract in the turn prompt#4346yougeqiu wants to merge 1 commit into
yougeqiu wants to merge 1 commit into
Conversation
Managed agents must run `buzz messages send` to deliver a reply — session text streamed during a turn is never posted to the channel. The turn prompt told agents to use `--reply-to` on `buzz messages send`, but never stated that session text is not delivered, so weaker models answered in plain session text and every reply was silently dropped: the turn ran, tokens were billed, the Activity panel streamed the answer, and the channel stayed empty with nothing logged. State the contract explicitly in `append_reply_instruction` and `append_new_thread_reply_instruction`: "Your session text is NOT delivered to the channel — nothing you type here reaches the human unless you send it." This is the model-agnostic, immediately effective fix the issue author verified locally; the larger harness-fallback (auto-posting final session text when no send was observed) is left for a follow-up. Refs block#2698 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
A managed agent's reply reaches the channel only if the model spontaneously decides to run
buzz messages send. The turn prompt told agents to use--reply-toonbuzz messages send, but never stated that session text is not delivered — so weaker models answered in plain session text and every reply was silently dropped: the turn ran, tokens were billed, the Activity panel streamed the answer, and the channel stayed empty with nothing logged. Reproduces #2698.Root cause
The delivery contract is implicit.
append_reply_instructionandappend_new_thread_reply_instruction(crates/buzz-acp/src/queue.rs) describe--reply-tothreading and namebuzz messages sendas the mechanism, but never state the negative: session text is not delivered. Models that don't infer this convention (the issue reproduces with Sonnet 5 vs Fable 5 on an otherwise identical turn) lose every reply.Fix
State the contract explicitly at the top of both instructions:
```
Your session text is NOT delivered to the channel —
nothing you type here reaches the human unless you send it.
To reply, run
buzz messages send --reply-to {event_id}...```
This is the model-agnostic, immediately effective direction the issue author verified locally ("adding the equivalent instruction to the agent's system prompt makes Sonnet 5 post correctly"). The larger harness fallback (auto-posting final session text when no send was observed during the turn) is intentionally not included here — it's a bigger change worth its own PR.
Test
test_reply_instruction_present_for_channel_thread_replyto assert the delivery contract is stated.keepalive_resets_idle_past_deadlinefails on this WSL host due to ms-scale timer jitter — it fails identically on unmodifiedmain, not caused by this change).cargo fmt --checkandcargo clippyclean.Closes #2698